package com.lagou.bigdata.task04;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * 编程实现基于tcp协议的服务器端
 */
public class ServerCommunicateTest {

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;

        // 4.准备一个List集合负责记录所有客户端对应的Socket即可
        List<Socket> clientList = new ArrayList<>();

        try {
            // 1.创建ServerSocket类型的对象并提供端口号
            serverSocket = new ServerSocket(8888);

            // 2.等待客户端的连接请求，调用accept方法
            while(true) {
                System.out.println("等待客户端的连接请求...");
                // 当没有客户端连接时，则服务器阻塞在accept方法的调用这里，连接成功之后将通信地址和对应的Socket放到List集合中
                socket = serverSocket.accept();
                clientList.add(socket);
                System.out.println("客户端" + socket.getInetAddress() + "连接成功！");
                // 3.每当有一个客户端连接成功，则需要启动一个新的线程为之服务
                new ServerThread(socket, clientList).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4.关闭Socket并释放有关的资源
            if (null != serverSocket) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
